<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<HTML
><HEAD
><TITLE
>dblink_connect</TITLE
><META
NAME="GENERATOR"
CONTENT="Modular DocBook HTML Stylesheet Version 1.79"><LINK
REV="MADE"
HREF="mailto:pgsql-docs@postgresql.org"><LINK
REL="HOME"
TITLE="PostgreSQL 9.1.2 Documentation"
HREF="index.html"><LINK
REL="UP"
TITLE="dblink"
HREF="dblink.html"><LINK
REL="PREVIOUS"
TITLE="dblink"
HREF="dblink.html"><LINK
REL="NEXT"
TITLE="dblink_connect_u"
HREF="contrib-dblink-connect-u.html"><LINK
REL="STYLESHEET"
TYPE="text/css"
HREF="stylesheet.css"><META
HTTP-EQUIV="Content-Type"
CONTENT="text/html; charset=ISO-8859-1"><META
NAME="creation"
CONTENT="2011-12-01T22:07:59"></HEAD
><BODY
CLASS="REFENTRY"
><DIV
CLASS="NAVHEADER"
><TABLE
SUMMARY="Header navigation table"
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
><TR
><TH
COLSPAN="5"
ALIGN="center"
VALIGN="bottom"
><A
HREF="index.html"
>PostgreSQL 9.1.2 Documentation</A
></TH
></TR
><TR
><TD
WIDTH="10%"
ALIGN="left"
VALIGN="top"
><A
TITLE="dblink"
HREF="dblink.html"
ACCESSKEY="P"
>Prev</A
></TD
><TD
WIDTH="10%"
ALIGN="left"
VALIGN="top"
><A
HREF="dblink.html"
ACCESSKEY="U"
>Up</A
></TD
><TD
WIDTH="60%"
ALIGN="center"
VALIGN="bottom"
></TD
><TD
WIDTH="20%"
ALIGN="right"
VALIGN="top"
><A
TITLE="dblink_connect_u"
HREF="contrib-dblink-connect-u.html"
ACCESSKEY="N"
>Next</A
></TD
></TR
></TABLE
><HR
ALIGN="LEFT"
WIDTH="100%"></DIV
><H1
><A
NAME="CONTRIB-DBLINK-CONNECT"
></A
>dblink_connect</H1
><DIV
CLASS="REFNAMEDIV"
><A
NAME="AEN130762"
></A
><H2
>Name</H2
>dblink_connect&nbsp;--&nbsp;opens a persistent connection to a remote database</DIV
><DIV
CLASS="REFSYNOPSISDIV"
><A
NAME="AEN130765"
></A
><H2
>Synopsis</H2
><PRE
CLASS="SYNOPSIS"
>dblink_connect(text connstr) returns text
dblink_connect(text connname, text connstr) returns text</PRE
></DIV
><DIV
CLASS="REFSECT1"
><A
NAME="AEN130767"
></A
><H2
>Description</H2
><P
>    <CODE
CLASS="FUNCTION"
>dblink_connect()</CODE
> establishes a connection to a remote
    <SPAN
CLASS="PRODUCTNAME"
>PostgreSQL</SPAN
> database.  The server and database to
    be contacted are identified through a standard <SPAN
CLASS="APPLICATION"
>libpq</SPAN
>
    connection string.  Optionally, a name can be assigned to the
    connection.  Multiple named connections can be open at once, but
    only one unnamed connection is permitted at a time.  The connection
    will persist until closed or until the database session is ended.
   </P
><P
>    The connection string may also be the name of an existing foreign
    server.  It is recommended to use
    the <CODE
CLASS="FUNCTION"
>postgresql_fdw_validator</CODE
> when defining
    the corresponding foreign-data wrapper.  See the example below, as
    well as the following:
    <A
HREF="sql-createforeigndatawrapper.html"
>CREATE FOREIGN DATA WRAPPER</A
>, <A
HREF="sql-createserver.html"
>CREATE SERVER</A
>, <A
HREF="sql-createusermapping.html"
>CREATE USER MAPPING</A
>
   </P
></DIV
><DIV
CLASS="REFSECT1"
><A
NAME="AEN130782"
></A
><H2
>Arguments</H2
><P
></P
><DIV
CLASS="VARIABLELIST"
><DL
><DT
><TT
CLASS="PARAMETER"
>conname</TT
></DT
><DD
><P
>       The name to use for this connection; if omitted, an unnamed
       connection is opened, replacing any existing unnamed connection.
      </P
></DD
><DT
><TT
CLASS="PARAMETER"
>connstr</TT
></DT
><DD
><P
><SPAN
CLASS="APPLICATION"
>libpq</SPAN
>-style connection info string, for example
       <TT
CLASS="LITERAL"
>hostaddr=127.0.0.1 port=5432 dbname=mydb user=postgres
       password=mypasswd</TT
>.
       For details see <CODE
CLASS="FUNCTION"
>PQconnectdb</CODE
> in
       <A
HREF="libpq-connect.html"
>Section 31.1</A
>.
      </P
></DD
></DL
></DIV
></DIV
><DIV
CLASS="REFSECT1"
><A
NAME="AEN130799"
></A
><H2
>Return Value</H2
><P
>    Returns status, which is always <TT
CLASS="LITERAL"
>OK</TT
> (since any error
    causes the function to throw an error instead of returning).
   </P
></DIV
><DIV
CLASS="REFSECT1"
><A
NAME="AEN130803"
></A
><H2
>Notes</H2
><P
>    Only superusers may use <CODE
CLASS="FUNCTION"
>dblink_connect</CODE
> to create
    non-password-authenticated connections.  If non-superusers need this
    capability, use <CODE
CLASS="FUNCTION"
>dblink_connect_u</CODE
> instead.
   </P
><P
>    It is unwise to choose connection names that contain equal signs,
    as this opens a risk of confusion with connection info strings
    in other <TT
CLASS="FILENAME"
>dblink</TT
> functions.
   </P
></DIV
><DIV
CLASS="REFSECT1"
><A
NAME="AEN130810"
></A
><H2
>Examples</H2
><PRE
CLASS="SCREEN"
>SELECT dblink_connect('dbname=postgres');
 dblink_connect
----------------
 OK
(1 row)

SELECT dblink_connect('myconn', 'dbname=postgres');
 dblink_connect
----------------
 OK
(1 row)

-- FOREIGN DATA WRAPPER functionality
-- Note: local connection must require password authentication for this to work properly
--       Otherwise, you will receive the following error from dblink_connect():
--       ----------------------------------------------------------------------
--       ERROR:  password is required
--       DETAIL:  Non-superuser cannot connect if the server does not request a password.
--       HINT:  Target server's authentication method must be changed.
CREATE USER dblink_regression_test WITH PASSWORD 'secret';
CREATE FOREIGN DATA WRAPPER postgresql VALIDATOR postgresql_fdw_validator;
CREATE SERVER fdtest FOREIGN DATA WRAPPER postgresql OPTIONS (hostaddr '127.0.0.1', dbname 'contrib_regression');

CREATE USER MAPPING FOR dblink_regression_test SERVER fdtest OPTIONS (user 'dblink_regression_test', password 'secret');
GRANT USAGE ON FOREIGN SERVER fdtest TO dblink_regression_test;
GRANT SELECT ON TABLE foo TO dblink_regression_test;

\set ORIGINAL_USER :USER
\c - dblink_regression_test
SELECT dblink_connect('myconn', 'fdtest');
 dblink_connect 
----------------
 OK
(1 row)

SELECT * FROM dblink('myconn','SELECT * FROM foo') AS t(a int, b text, c text[]);
 a  | b |       c       
----+---+---------------
  0 | a | {a0,b0,c0}
  1 | b | {a1,b1,c1}
  2 | c | {a2,b2,c2}
  3 | d | {a3,b3,c3}
  4 | e | {a4,b4,c4}
  5 | f | {a5,b5,c5}
  6 | g | {a6,b6,c6}
  7 | h | {a7,b7,c7}
  8 | i | {a8,b8,c8}
  9 | j | {a9,b9,c9}
 10 | k | {a10,b10,c10}
(11 rows)

\c - :ORIGINAL_USER
REVOKE USAGE ON FOREIGN SERVER fdtest FROM dblink_regression_test;
REVOKE SELECT ON TABLE foo FROM  dblink_regression_test;
DROP USER MAPPING FOR dblink_regression_test SERVER fdtest;
DROP USER dblink_regression_test;
DROP SERVER fdtest;
DROP FOREIGN DATA WRAPPER postgresql;</PRE
></DIV
><DIV
CLASS="NAVFOOTER"
><HR
ALIGN="LEFT"
WIDTH="100%"><TABLE
SUMMARY="Footer navigation table"
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
><TR
><TD
WIDTH="33%"
ALIGN="left"
VALIGN="top"
><A
HREF="dblink.html"
ACCESSKEY="P"
>Prev</A
></TD
><TD
WIDTH="34%"
ALIGN="center"
VALIGN="top"
><A
HREF="index.html"
ACCESSKEY="H"
>Home</A
></TD
><TD
WIDTH="33%"
ALIGN="right"
VALIGN="top"
><A
HREF="contrib-dblink-connect-u.html"
ACCESSKEY="N"
>Next</A
></TD
></TR
><TR
><TD
WIDTH="33%"
ALIGN="left"
VALIGN="top"
>dblink</TD
><TD
WIDTH="34%"
ALIGN="center"
VALIGN="top"
><A
HREF="dblink.html"
ACCESSKEY="U"
>Up</A
></TD
><TD
WIDTH="33%"
ALIGN="right"
VALIGN="top"
>dblink_connect_u</TD
></TR
></TABLE
></DIV
></BODY
></HTML
>